package com.yigerende.web;

import com.yigerende.model.User;

import com.yigerende.model.Yhuser;
import com.yigerende.service.BlogService;
import com.yigerende.service.TagService;
import com.yigerende.service.TypeService;
import com.yigerende.service.YhuserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import java.io.File;
import java.io.IOException;

/*
* 登陆页面
* */
@Controller
@RequestMapping("/yhAdmin")
public class YhLoginController {

    @Autowired
    private BlogService blogService;

    @Autowired
    private TypeService typeService;

    @Autowired
    private TagService tagService;

    @Autowired
    private YhuserService yhuserService;


    //跳转到登录页面(到主页面用GetMapping)
    @GetMapping
    public String loginPage(){
        return "yhLogin";
    }




    //登录方法
    @PostMapping("/login")
    public String login(@PageableDefault(size = 7,sort = {"updateTime"},direction = Sort.Direction.DESC)
                                    Pageable pageable, Model model,@RequestParam String username,
                        @RequestParam String password,
                        HttpSession session,
                        RedirectAttributes attributes){
        //控制层传递用户输入的用户名和密码，传递到了service的接口，里面的实现方法，传递到了dao层，到层传递到了数据库
        Yhuser yhuser = yhuserService.checkUser(username,password);
        if(yhuser != null){//不等于空,说明查找到用户名和密码了
            //密码设置为空，不能把密码传到前面页面显示
            yhuser.setPassword(null);
            //把查找到的数据放到session里面(用来显示到网页)
            session.setAttribute("thUser",yhuser);
            //登陆成功显示登陆成功页面
            return "qqInfo";
        }else{//用户密码不正确
            //把错误信息放到这个attributes里面,就可以显示出来
            attributes.addFlashAttribute("message","用户名或密码错误");
            //返回到登录页面,再次登录就会有问题，所以用重定向redirect:,会自动弹到loginPage()这个方法就是到登录页面的
            return "redirect:/yhAdmin";
        }

    }



    //注销用户(到主页面用GetMapping)
    @GetMapping("/logout")
    public String logout(HttpSession session){
        //注销退出要吧session里面的内容(用户名和密码)清空
        session.removeAttribute("thUser");
        //也是重定向，会自动调用loginPage()这个方法，弹到登陆页面
        return "redirect:/";
    }


    //注册页面
    @GetMapping("/registers")
    public String register(){
        return "register";
    }



    //点击注册，插入数据库
    @PostMapping("/zhuChe")
    public String zhuChe(@Valid Yhuser yhuser,RedirectAttributes attributes){

        //判断用户输入的账号是否存在数据库
        Yhuser zh = yhuserService.getYhByName(yhuser.getUsername());
        if (zh != null){
            attributes.addFlashAttribute("message","注册失败，已经有这个账号");
            return "redirect:/yhAdmin/registers";
        }

        yhuser.setAvatar("https://kyun.ltyuanfang.cn/tc/2020/08/20/73dc8f8c66343.png");
        yhuser.setType(1);
        Yhuser y = yhuserService.saveYh(yhuser);
        if(y == null) {
            attributes.addFlashAttribute("message", "对不起，操作失败!");
            return "redirect:/yhAdmin/registers";
        }else{
            attributes.addFlashAttribute("message","恭喜操作成功");
            return "redirect:/yhAdmin";
        }
    }


    //跳转个人中心
    @GetMapping("/qqInfos")
    public String geRen(){
        return "qqInfo";
    }







    //个人中心修改
    @PostMapping("/upload/{id}")
    public String upload(@RequestParam String nickname,
                         @RequestParam String email,
                         @RequestParam MultipartFile avatar,
                         @PathVariable Long id,
                         HttpServletRequest req,
                         HttpSession session,
                         RedirectAttributes attributes) throws IOException {


        //判断用户是否上传了文件

            //2.根据时间戳创建新的文件名，这样即便是第二次上传相同名称的文件，也不会把第一次的文件覆盖了
            String fileName = System.currentTimeMillis() + avatar.getOriginalFilename();

            //3.通过req.getServletContext().getRealPath("") 获取当前项目的真实路径，然后拼接前面的文件名
            String destFileName = req.getServletContext().getRealPath("") + "uploaded" + File.separator + fileName;

            //4.第一次运行的时候，这个文件所在的目录往往是不存在的，这里需要创建一下目录（创建到了webapp下uploaded文件夹下）
            File destFile = new File(destFileName);
            destFile.getParentFile().mkdirs();
            //5.把浏览器上传的文件复制到希望的位置
            avatar.transferTo(destFile);


            Yhuser yhuser =new Yhuser();
            yhuser.setNickname(nickname);
            yhuser.setEmail(email);
            //暂时还不会修改图片路径，用固定图片
            yhuser.setAvatar("https://kyun.ltyuanfang.cn/tc/2020/08/20/73dc8f8c66343.png");
            yhuser.setId(id);

            //传递数据库修改
            yhuserService.updateYhu(yhuser);
            session.setAttribute("thUser",yhuser);
            attributes.addFlashAttribute("message","更新成功");
            return "redirect:/yhAdmin/qqInfos";


    }
}
